package com.itlong.cloud.operate.dao;

import com.itlong.cloud.POJO.PO.DeveloperAccountAuthPO;
import com.itlong.cloud.POJO.PO.PropertyRoleProjectPO;
import com.itlong.cloud.POJO.PO.RobotDeveloperAccountAuthPO;
import com.itlong.cloud.POJO.VO.operate.OperateDeveloperAuthDeviceAuthListVO;
import com.itlong.cloud.POJO.VO.operate.OperateDeveloperAuthProjectInfoVO;
import com.itlong.cloud.POJO.VO.operate.OperateDeveloperAuthVO;
import com.itlong.cloud.POJO.VO.operate.OperateRobotDeveloperDeviceAuthVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      运营-开发者授权管理持久层接口
 * </desc>
 *
 * @createDate 2018/12/18
 */
@Mapper
@Repository
public interface IOperateDeveloperAuthDao {

    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author Qiang.S
     * @createDate 2018/12/19
     */
    List<OperateDeveloperAuthVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param userIds 用户编号
     * @return  分页数据集
     * @author Qiang.S
     * @createDate 2018/12/19
     */
    List<OperateDeveloperAuthProjectInfoVO> getProjectInfoByUserId(@Param("userIds") String[] userIds);
    /**
     * <desc>
     *      获取分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return 总数量
     * @author Qiang.S
     * @createDate 2018/12/19
     */
    Integer getPageCount(Map<String, Object> params);

    /**
     * <desc>
     *      删除原数据
     * </desc>
     *
     * @param userId 开发者账号id
     * @param dataType 数据类型
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/12/18
     */
    Integer deleteByType(@Param("userId") String userId, @Param("dataType") Integer dataType);

    /**
     * <desc>
     *      批量保存IP数据
     * </desc>
     *
     * @param list 保存的数据集合
     * @return 0-失败，1-成功
     * @author wangzhi
     * @createDate 2018/12/18
     */
    Integer batchSaveIp(List<DeveloperAccountAuthPO> list);

    /**
     * <desc>
     *      批量保存机器人开发者数据
     * </desc>
     *
     * @param list 保存的数据集合
     * @return 0-失败，1-成功
     * @author Qiang.S
     * @createDate 2020/03/20
     */
    Integer batchSaveDevelopInfo(List<RobotDeveloperAccountAuthPO> list);

    /**
     * <desc>
     *      批量保存MAC数据
     * </desc>
     *
     * @param list 保存的数据集合
     * @return 0-失败，1-成功
     * @author wangzhi
     * @createDate 2018/12/18
     */
    Integer batchSaveMac(List<DeveloperAccountAuthPO> list);

    /**
     * <desc>
     *      批量保存机器人数据
     * </desc>
     *
     * @param list 保存的数据集合
     * @return 0-失败，1-成功
     * @author Qiang.S
     * @createDate 2018/12/27
     */
    Integer batchSaveRobot(List<DeveloperAccountAuthPO> list);

    /**
     * <desc>
     *      删除机器人数据
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 用户编号
     * @return 0-失败，1-成功
     * @author Qiang.S
     * @createDate 2019/01/07
     */
    Integer deleteRobot(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     *      有效期延期设置
     * </desc>
     *
     * @param map 有效期延期设置参数
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/12/18
     */
    Integer moreValidity(Map<String, Object> map);

    /**
     * <desc>
     *      获取原始的设备授权数据
     * </desc>
     *
     * @param params 查询参数
     * @return 原始的设备授权数据
     * @author wangzhi
     * @createDate 2018/12/18
     */
    PropertyRoleProjectPO getOriginalProjectInfoByRole4(Map<String, Object> params);

    /**
     * <desc>
     *      获取项目下电梯设备数据
     * </desc>
     *
     * @param params 查询参数
     * @return 项目下电梯设备数据
     * @author wangzhi
     * @createDate 2018/12/18
     */
    List<OperateDeveloperAuthDeviceAuthListVO> getDeviceList(Map<String, Object> params);

    /**
     * <desc>
     *      获取项目下电梯设备数据
     * </desc>
     *
     * @param params 查询参数
     * @return 项目下电梯设备数据
     * @author wangzhi
     * @createDate 2018/12/18
     */
    List<OperateDeveloperAuthDeviceAuthListVO> getDeviceListCloudElevator(Map<String, Object> params);

    /**
     * <desc>
     *      获取用户绑定机器人编号
     * </desc>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return 项目下电梯设备数据
     * @author Qiang.S
     * @createDate 2019/01/07
     */
    String getRobotId(@Param("userId")String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     *      设备授权
     * </desc>
     *
     * @param params 设备授权参数
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/12/18
     */
    Integer deviceAuth(Map<String, Object> params);

    /**
     * <desc>
     *      获取一个未使用的第三方提供的云对讲appid逻辑主键
     * </desc>
     *
     * @return 第三方提供的云对讲appid逻辑主键
     * @author wangzhi
     * @createDate 2018/12/20
     */
    String getOneCloudIntercomAppidId();

    /**
     * <desc>
     *      绑定第三方提供的云对讲appid逻辑主键
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2018/12/20
     */
    Integer bindingCloudIntercomAppidId(@Param("cloudIntercomAppidId") String cloudIntercomAppidId);

    /**
     * <desc>
     *      获取项目下门禁设备数据
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/02/20
     */
    List<OperateDeveloperAuthDeviceAuthListVO> getDeviceListCloudEntrance(Map<String, Object> params);

    /**
     * <desc>
     *      查询已绑定该项目云对讲SDK的开发者个数
     * </desc>
     *
     * @param projectId 项目id
     * @return 已绑定该项目云对讲SDK的开发者个数
     * @author wangzhi
     * @createDate 2019/03/18
     */
    Integer getCloudIntercomSdkCount(@Param("projectId") String projectId);

    /**
     * <desc>
     *      查询已绑定该项目云电梯API的开发者个数
     * </desc>
     *
     * @param projectId 项目id
     * @return 已绑定该项目云电梯API的开发者个数
     * @author wangzhi
     * @createDate 2019/03/18
     */
    Integer getCloudElevatorApiCount(@Param("projectId") String projectId);

    /**
     * <desc>
     *      更新机器人开发者权限
     * <desc/>
     *
     * @param params 更新参数
     * @return
     * @author Qiang.S
     * @createDate 2020-03-20
     */
    Integer updateRobotDevelopApi(Map<String, Object> params);

    /**
     * <desc>
     *      更新机器人开发者权限
     * <desc/>
     *
     * @param userId 用户编号
     * @param projectId 项目编号
     * @return
     * @author Qiang.S
     * @createDate 2020-03-20
     */
    Integer deleteRobotDevelopInfo(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     *      查询机器人开发者sdk权限
     * <desc/>
     *
     * @param params 查询参数
     * @return
     * @author Qiang.S
     * @createDate 2020-03-20
     */
    OperateRobotDeveloperDeviceAuthVO getRobotDevelopAuth(Map<String, Object> params);

    /**
     * <desc>
     *      查询机器人开发者sdk设备信息
     * <desc/>
     *
     * @param params 查询参数
     * @return
     * @author Qiang.S
     * @createDate 2020-03-20
     */
    List<Map<String, Object>> getRobotDevelopInfo(Map<String, Object> params);

    /**
     * <desc>
     *      查询机器人开发者机器人编号
     * <desc/>
     *
     * @param params 查询参数
     * @return
     * @author Qiang.S
     * @createDate 2020-03-20
     */
    String getRobotDevelopRobotInfo(Map<String, Object> params);

    /**
     * <desc>
     *
     * </desc>
     *
     * @param params
     * @return
     * @Author Zhu.yj
     * @createDate  2020/9/7
     */
    List<String> getCloudControllerElevator(Map<String, Object> params);
}
